- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何使用 CUDA 构建 PHP 扩展?我无法构建此示例?我不明白。你能帮助我吗?谢谢。
Ubuntu 12.04 x64 (3.2.0-54-generic #82-Ubuntu SMP Tue Sep 10 20:08:42 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
GCC 4.6.3
CUDA 5.5 (http://developer.download.nvidia.com/compute/cuda/5_5/rel/installers/cuda_5.5.22_linux_64.run)
Cuda compilation tools release 5.5, V5.5.0
PHP 5.3.10-1
Zend Engine 2.3.0
libtool (GNU libtool) 2.4.2
install:
sudo apt-get install php5-dev
build:
phpize
./configure --enable-cuda_ext CC=nvcc
make
verify:
php-config | grep extension-dir
php -d extension=cuda_ext.so -m
config:
sudo vim /etc/php5/apache2/php.ini:
extension=cuda_ext.so
files:
config.m4
php_cuda_ext.h
cuda_ext.cu
$ phpize --clean && phpize && ./configure --enable-cuda_ext CC=nvcc
Cleaning..
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether nvcc accepts -g... yes
checking for nvcc option to accept ISO C89... none needed
checking how to run the C preprocessor... nvcc -E
checking for icc... no
checking for suncc... no
checking whether nvcc and cc understand -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... no
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for PHP prefix... /usr
checking for PHP includes... -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib
checking for PHP extension directory... /usr/lib/php5/20090626
checking for PHP installed headers prefix... /usr/include/php5
checking if debug is enabled... no
checking if zts is enabled... no
checking for re2c... no
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
checking for gawk... no
checking for nawk... nawk
checking if nawk is broken... no
checking whether to enable cuda_ext support... yes, shared
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking how to run the C++ preprocessor... g++ -E
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /bin/sed
checking for fgrep... /bin/grep -F
checking for ld used by nvcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking for gawk... (cached) nawk
checking command to parse /usr/bin/nm -B output from nvcc object... ok
checking for sysroot... no
checking for mt... mt
checking if mt is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if nvcc supports -fno-rtti -fno-exceptions... no
checking for nvcc option to produce PIC... -Xcompiler -fPIC -DPIC
checking if nvcc PIC flag -Xcompiler -fPIC -DPIC works... yes
checking if nvcc static flag -static works... no
checking if nvcc supports -c -o file.o... yes
checking if nvcc supports -c -o file.o... (cached) yes
checking whether the nvcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... yes
checking dynamic linker characteristics... nvcc fatal : Unknown option 'print-search-dirs'
GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands
***** config.m4 *****
dnl config.m4 for cuda_ext
PHP_ARG_ENABLE(cuda_ext,
[whether to enable cuda_ext support],
[ --enable-cuda_ext Enable cuda_ext support])
if test "$PHP_CUDA_EXT" != "no"; then
AC_DEFINE(HAVE_CUDA_EXT, 1, [Whether you have cuda_ext support])
PHP_REQUIRE_CXX()
PHP_ADD_INCLUDE(/usr/local/cuda-5.5/include)
PHP_ADD_INCLUDE(/opt/libs/thrust)
PHP_ADD_LIBRARY(stdc++, 1, TEST_SHARED_LIBADD)
PHP_NEW_EXTENSION(cuda_ext, cuda_main.cu, $ext_shared, , "", "yes")
fi
***** php_cuda_ext.h *****
PHP_FUNCTION(cuda_function);
***** cuda_main.cu *****
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
extern "C" {
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "Zend/zend.h"
#include "Zend/zend_hash.h"
}
#include "php_cuda_ext.h"
ZEND_BEGIN_ARG_INFO(arginfo_cuda_function, 0)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO();
zend_function_entry cuda_ext_functions[] =
{
ZEND_FE(cuda_function, arginfo_cuda_function)
{NULL, NULL, NULL} /* Marks the end of function entries */
};
// cuda_ext_module_entry
zend_module_entry cuda_ext_module_entry = {
STANDARD_MODULE_HEADER,
"cuda_ext",
cuda_ext_functions, /* Function entries */
NULL, /* Module init */
NULL, /* Module shutdown */
NULL, /* Request init */
NULL, /* Request shutdown */
NULL, /* Module information */
"0.1", /* Replace with version number for your extension */
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_CUDA_EXT
extern "C" {
ZEND_GET_MODULE(cuda_ext)
}
#endif
PHP_FUNCTION(cuda_function)
{
int irv = 0;
zval *value = NULL;
irv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value);
if (irv == FAILURE) {
RETURN_FALSE;
}
switch (Z_TYPE_P(value)) {
case IS_NULL:
php_printf("type IS_NULL ");
break;
case IS_LONG:
php_printf("type IS_LONG ");
php_printf("Computing %ld * 2: %ld", Z_LVAL_P(value), Z_LVAL_P(value)*2);
break;
default:
break;
}
}
#include "algorithm"
#include "cstdlib"
#include "thrust/host_vector.h"
#include "thrust/device_vector.h"
#include "thrust/generate.h"
#include "thrust/sort.h"
#include "thrust/copy.h"
#include "thrust/reduce.h"
int cuda_test()
{
// generate 32M random numbers serially
thrust::host_vector<int> h_vec(32 << 20);
std::generate(h_vec.begin(), h_vec.end(), rand);
// transfer data to the device
thrust::device_vector<int> d_vec = h_vec;
// sort data on the device (846M keys per second on GeForce GTX 480)
thrust::sort(d_vec.begin(), d_vec.end());
// transfer data back to host
thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());
return 0;
}
/bin/bash /home/skynowa/Projects/CCuda/PHP_module/libtool --mode=link nvcc -DPHP_ATOM_INC -I/home/skynowa/Projects/CCuda/PHP_module/include -I/home/skynowa/Projects/CCuda/PHP_module/main -I/home/skynowa/Projects/CCuda/PHP_module -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -I/usr/local/cuda-5.5/include -I/opt/libs/thrust -DHAVE_CONFIG_H -g -O2 -o cuda_ext.la -export-dynamic -avoid-version -prefer-pic -module -rpath /home/skynowa/Projects/CCuda/PHP_module/modules cuda_main.lo
libtool: link: `cuda_main.lo' is not a valid libtool object
make: *** [cuda_ext.la] Error 1
最佳答案
我想,你忘了执行命令:
$ sudo make install
执行此命令后请检查,这会将文件移动到默认的动态扩展目录路径。在您的 PHP.INI 中提及该路径。
希望对您有所帮助。
关于具有 CUDA 功能的 PHP 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123077/
我是 magento 的新手,目前我在 magento 安装期间遇到“必须加载 PHP 扩展 curl ”错误。你能帮帮我吗? 最佳答案 如果您的服务器上没有安装 curl,您可以键入以下命令之一来安
我在 macOS Mojave/macOS Big Sur/macOS Monterey/macOS Ventura 上使用最新的 php 版本 7.2 并收到类似错误 $composer requ
这个问题已经有答案了: Why generic type is not applicable for argument extends super class for both? (5 个回答) 已关
我正在使用 NightWatch.js 并进行一些 UI 测试,我想用一些额外的 desiredCapabilities 启动默认浏览器实例(即启用扩展并应用一些特定值)。 p> 注意:我可以执行这些
有人知道为什么我在 java 8 中使用此代码时没有服务器扩展名称吗: try { URL url = new URL(urlString); URLC
扩展提供给我的类(class)。为现有的类提供新功能。或扩展现有的mixin s 或虚拟类,任何东西都可以工作。 也许是这样的: class FlatButton {} // maybe no
我有一个关于使用 c 代码和 mod_wsgi 扩展 python 的问题。 我在 apache 服务器中有一个 django 应用程序,它查询 postgresql 数据库以生成报告。在某些报告中,
testcafe支持在Chrome浏览器中加载crx扩展吗? 如果是这样,请告诉我需要尝试什么方法。 我尝试了下面的代码,但没有成功 await t.eval(new Function(fs.read
这个问题已经有答案了: What is a raw type and why shouldn't we use it? (16 个回答) 已关闭 3 年前。 有什么区别: // 1 class A c
我正在编写一个 chrome 扩展来记录单击开始按钮后触发的请求。 这是我的文件:1. list .json { "manifest_version": 2, "name": "recorde
我每天都在使用 vim 和 perforce 现在我的问题是,如果我想查看 perforce 文件修订版,则从命令模式下的 vim :!p4 打印文件#1 vim 试图让我获得缓冲区 #1。有没有办法
大家好,我有一个关于 NUnit 扩展(2.5.10)的问题。 我想做的是向 数据库。为此,我使用 Event 创建了 NUnit 扩展 听众。 我遇到的问题是公共(public)无效 TestFin
我有弹出窗口,而不是模态窗口。 如何通过单击页面的其他部分(不在窗口中)来关闭此窗口? 最佳答案 像这样的东西: function closeWin(e, t) { var el = win.
我通常非常谨慎地使用扩展方法。当我确实觉得有必要编写一个扩展方法时,有时我想重载该方法。我的问题是,您对调用其他扩展方法的扩展方法有何看法?不好的做法?感觉不对,但我无法真正定义原因。 例如,第二个
扩展 Ant Ant带有一组预定义的任务,但是你可以创建自己的任务,如下面的例子所示。 定制Ant 任务应扩展 org.apache.tools.ant.Task 类,同时也应该拓展 execut
我想要一个重定向所有请求的扩展: http://website.com/foo.js 到: http://localhost/myfoo.js 我无法使用主机文件将主机从 website.com 编辑
对于为什么 QChartView 放在 QTabWidget 中时会扩展,我有点迷惑。 这是 QChartView 未展开(因为它被隐藏)时应用程序的图片。 应用程序的黑色部分是 QOpenGLWid
如果在连接条件中使用 OR 运算符,如何优化以下查询以避免 SQL 调优方面的 OR 扩展? SELECT t1.A, t2.B, t1.C, t1.D, t2.E FROM t1 LEFT J
一旦加载插件的问题得到解决(在 .NET 中通过 MEF 的情况下),下一步要解决的是与它们的通信。简单的方法是实现一个接口(interface),使用插件实现,但有时插件只需要扩展应用程序的工作方式
在我的 Symfony2 包中,我需要检查是否定义了一个函数(一个扩展)。更具体地说,如果安装了 KnpMenuBundle,我会在我的包中使用那个,否则我将自己渲染插件。 我试过了,但这当然不起作用
我是一名优秀的程序员,十分优秀!