- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正致力于在 CUDA 中移植熔岩流模型(github 上的完整代码在这里:Full source of the CUDA-SCIARA Fv2 lava flow model。
编辑
为了重现该问题,请使用 github README 上的说明获取项目 SCIARA_FV2_CUDA_MULTICELLS 的开发副本。然后在没有 -G 选项的情况下编译并作为命令行参数传递 -c ../data/2006/PARAMETERS.cfg 。 (引用的代码位于此 file 的第 260 行)
我在 __device__
中遇到 if 构造问题 功能。
它根据当前的熔岩数量和温度计算新温度,如果它低于一个常数参数(变量 d_PTsol=1143.0
),熔岩就会固化。
下面代码中的问题是,如果我使用 -G 选项(用于生成设备代码调试信息)进行编译,它可以完美运行,但如果不使用 -G 选项,则会出现错误。
double new_temp = d_computeNewTemperature(sommah,sommath);
if(new_temp <= d_PTsol){
printf("Solidified %.5f,%.5f\n",new_temp,d_PTsol);
double newQuote = d_sbts_updated[d_getIdx(row,col,ALTITUDE)]+d_sbts_current[d_getIdx(row,col,THICKNESS)];
//CODE FOR LAVA SOLIDIFICATION HERE
}else{
//there is lava and is not solidified -> activate this cell!
adjustAdaptiveGrid(row,col);
}
在模拟的某个点输出这样的东西:
Solidified 1344.68654 1143.00000
Solidified 1343.99509 1143.00000
Solidified 1320.50061 1143.00000
Solidified 1325.53942 1143.00000
为了使事情变得更微妙,如果我将 if 条件更改为严格不等式,问题就会完全消失 if(new_temp < d_PTsol)
.
使用以下选项并在单独编译模式下进行编译
-O3 -Xcompiler -fPIC -std=c++11
和链接使用
--cudart static --relocatable-device-code=true -gencode arch=compute_35,code=compute_35 -gencode arch=compute_35,code=sm_35
有人遇到过类似的问题吗?我做错了什么吗?
更新
这个问题似乎与使用 <= as 条件的 if else 结构的翻译有某种关系。翻译
if(new_temp <= d_PTsol) {
//solidification
}else{
//something else
}
到
if(new_temp <= d_PTsol) {
//solidification
}
if(!(new_temp <= d_PTsol)){
//something else
}
使代码完美运行。
最佳答案
我遇到了类似的问题。我的代码使用 -G 选项但并非没有。我只需要将 -fmad=false 和 -prec-div=false 添加到编译器选项(有关更多信息,请参见:http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#options-for-steering-gpu-code-generation)。
默认情况下,此值为 true 并优化您的单精度操作,但以您的精度为代价。如果您启用 Debug模式,此优化将被禁用。我需要精确的值,因此我的代码只适用于 -G。也许你有类似的问题。 (有关 CUDA 浮点精度的更多信息:http://docs.nvidia.com/cuda/cuda-c-programming-guide/#mathematical-functions-appendix)
关于CUDA - nvcc -G - 如果工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30119430/
我已经在我的电脑上安装了 CUDA 工具包,但似乎有些东西坏了。 nvcc 无法编译,像这样的简单 hello-world 也无法编译: #include int main(int argc, ch
我想知道,为什么 NVCC 无法为小矩阵 (N=4) 展开以下 Cholesky 分解内核。 template __device__ inline void choleskyKernel2(T* C)
我将 cuda sdk 5.0 安装到/opt 甚至编译了所有示例,但我无法执行 nvcc。这是一些控制台输出: 我正在使用 linux mint 13。 最佳答案 更新 我对 .bash_profi
我想将我的 CUDA 代码组织成单独的目标文件,以便在编译结束时进行链接,就像在 C++ 中一样。为此,我希望能够声明一个指向 __constant__ 的外部指针。内存在头文件中,并将定义放在 .c
NVCC 对设备代码的优化效果如何?它是否进行了诸如常量折叠和公共(public)子表达式消除之类的优化? 例如,它会减少以下内容: float a = 1 / sqrtf(2 * M_PI); fl
我正在尝试在 CUDA 中做这样的事情: char_sig=code[k][1] & 0b00000010; 而且 NVCC 编译器一直给我错误预期的“;” 相同的代码适用于 GCC C 编译器。我注
我正在尝试在 CUDA 中做这样的事情: char_sig=code[k][1] & 0b00000010; 而且 NVCC 编译器一直给我错误预期的“;” 相同的代码适用于 GCC C 编译器。我注
这个问题已经有答案了: Using CUDA with Visual Studio 2017 (9 个回答) 已关闭 6 年前。 我一直在尝试让 CUDA 在我的电脑上运行。我尝试干净(重新)安装最新
为什么编译器不做一些可以在内核中完成的简单优化?我有以下矩阵乘法代码: __global__ void matrixMultiply(float * A, float * B, float * C,
我刚刚开始在 CUDA 上编码,我试图将我的代码管理到一堆不同的文件中,但我的一个宏由于某种原因不会接受传递的参数。 错误是: addkernel.cu(19): error: identifier
请原谅我的菜鸟。我们的研究小组最近购买了一台服务器,其中装有 2 个 NVIDIA Tesla 单元,我负责设置它。 服务器单元正在运行 Rocks 6.0。 所以我根据以下说明安装从 NVIDIA
我希望 NVCC 将以下警告视为错误: warning : calling a __host__ function("foo") from a __host__ __device__ function
我有一个项目正在使用 CUDA 运行。由于各种原因,它需要编译一个可执行文件,无论是否支持 GTK,无需重新编译所有相关文件。在 C 下,我通过将对象的基本版本编译为 *.o 来完成此操作。和对象的
我在带有 GTX 570(计算能力 2.0)的 Ubuntu 10.10 上使用 CUDA 4.0,以及 GCC 编译器套件。据我了解,在编译过程中,CUDA 编译器驱动程序 nvcc 拆分了 .cu
我正在尝试在我的 GPU 上测量峰值单精度触发器,因为我正在修改 PTX 文件以在寄存器上执行连续的 MAD 指令。不幸的是,编译器正在删除所有代码,因为它实际上没有任何用处,因为我没有执行任何数据加
我需要从命令行使用 nvcc 编译 cuda .cu 文件。该文件是“vectorAdd_kernel.cu”并包含以下代码: extern "C" __global__ void VecAdd_ke
我正在尝试使用 nvcc 编译一个 .cu 程序,但每次我尝试在 Unix 中编译后,我的命令都不再有效。我得到一个错误: “命令”:找不到命令。 这是为什么呢?每次编译后我都必须注销/退出。 [编辑
我正在尝试将 nvcc 与最简单的示例一起使用,但它无法正常工作。我正在编译并执行来自 https://devblogs.nvidia.com/easy-introduction-cuda-c-and
在我的 mac(Snow Leopard) 上更新 CUDA 后,nvidia 的 nvcc 编译器在编译时表现得很奇怪: nvcc batched_gemm.cu 我收到以下编译错误,我不知道如何
我正在尝试编译一些 CUDA,我希望显示编译器警告。相当于: g++ fish.cpp -Wall -Wextra 除了 NVCC 不理解这些,你必须通过它们: nvcc fish.cu --comp
我是一名优秀的程序员,十分优秀!