我的程序中出现以下错误:
error D8016: '/ZI' and '/clr' command-line options are incompatible
Run Code Online (Sandbox Code Playgroud)
当我在配置 - >常规中放入以下行并启用公共运行时(如果我不启用它然后使用system和System :: Drawing时会出现错误)
#using <system.drawing.dll>
using namespace System;
using namespace System::Drawing;
Run Code Online (Sandbox Code Playgroud)
实际上我将在我的代码中使用一些需要上面的dll的Windows库.
如何解决这个问题?
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/imgproc/imgproc_c.h>
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <ctype.h>
#using <system.drawing.dll>
using namespace System;
using namespace System::Drawing;
using namespace std;
int main( int argc, char** argv )
{
IplImage *source = cvLoadImage( "Image.bmp");
// Here we retrieve a percentage value to a integer
int percent =20;
// declare a destination IplImage object with correct …
Run Code Online (Sandbox Code Playgroud) heights1=c(5,5,4.5,4,4,4,4.5,2,4,4)
opar <- par(lwd = 0.3)
barplot(heights1,xlim=c(0,3), ylim=c(0,5), width=0.1,
main="Langauges(Verbal & Non-verbal)",
names.arg=c("Spanish", "Speak" , "English","Speak", "Hindi",
"Speak", "Arabic", "Speak", "Body Lang", "Speak"), ylab="Skill level ",
xlab="Language starting with mostly used", col=c("darkblue","red"),
cex.names=0.7,space=c(2,0,2,0,2,0,2,0,2,0))
legend("top", c("darkblue","red"), c("reading/Writing", "Speaking") );
Run Code Online (Sandbox Code Playgroud)
蓝色用于"读/写",红色用于"说".如何在图例中进行修正?(我不想在barplot函数中定义图例)
据我所知,在以下行中,我们尝试写入无效的内存位置.但这实际上也是一个未对齐的指针.有人可以解释什么是未对齐的指针,以及下面的未对齐指针是什么?
*(int*)0xffffffff = 0xbad;
Run Code Online (Sandbox Code Playgroud) 我试图在Intel i3处理器上找到32个元素(每个1字节数据)的总和减少量.我这样做了:
s=0;
for (i=0; i<32; i++)
{
s = s + a[i];
}
Run Code Online (Sandbox Code Playgroud)
但是,由于我的应用程序是一个需要更少时间的实时应用程序,因此需要花费更多时间.请注意,最终金额可能超过255.
有没有办法可以使用低级SIMD SSE2指令实现这一点?不幸的是我从未使用过SSE.我试图为此目的搜索sse2函数,但它也不可用.(sse)是否可以保证减少这种小型问题的计算时间?
有什么建议??
注意:我已经使用OpenCL和CUDA实现了类似的算法,虽然问题规模很大,但效果很好.对于小型问题,开销成本更高.不确定它在SSE上是如何工作的
为了理解如何确保对齐要求得到满足,我多次阅读以下文章,从OpenCL p.no:157中的异构计算一书.这显示了如何为图像卷积中的问题填充填充(假设工作组大小为16 x 16).
对齐记忆访问
NVIDIA和AMD GPU的性能均受益于全局内存中的数据对齐.特别是对于NVIDIA,在128字节边界上对齐访问和访问128字节段将理想地映射到存储器硬件.但是,在这个例子中,16宽工作组将只访问64字节段,因此数据应该对齐到64字节的地址.这意味着每个工作组访问的第一列应该从64字节对齐的地址开始.在此示例中,使边框像素不生成值的选择确定所有工作组的偏移量将是工作组维度的倍数(即,对于16 x 16工作组,工作组将开始访问列N*16处的数据) .为确保每个工作组正确对齐,
1 - 任何人都可以帮助我理解填充每个工作组访问的第一列后是如何从64字节对齐的地址开始的(上述段落中提到的要求,对吧?)?
2 - 该图也是正确的声明:对于16 x 16工作组,工作组将开始访问N*16列的数据.
如果正确,图中所示的工作组1,2应该开始访问第1x16列的数据,这与图中所示的相反.我完全糊涂了!! :(
更新: Q-2现在对我来说很清楚. 实际上图中显示的工作组是2,1(在opencl惯例中,第一列),所以它完全正确:2x16 = 32而不是我想的1x16.
但问题不是.1仍然没有答案.
试图了解PNG格式.
考虑这个PNG图像:
图像取自这里
在十六进制编辑器中,它看起来像这样:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 80 00 00 00 44 08 02 00 00 00
C6 25 AA 3E 00 00 00 C2 49 44 41 54 78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F
B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE …
Run Code Online (Sandbox Code Playgroud) 我怎样才能100%确定我的opencl内核实际上是在GPU上运行而不是在CPU上运行.我无法理解这一点,因为openCL内核也可以在CPU上运行.这里有什么指示?
__global__ void helloCUDA(float f)
{
printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}
int main()
{
helloCUDA<<<1, 5>>>(1.2345f);
cudaDeviceSynchronize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么是cudaDeviceSynchronize(); 在很多地方例如这里 在内核调用后不需要它?
使用OpenCv 2.4
我有两个加载图像的选项:
1- CvMat and Imread
2- IpImage and CvLoadImage
Run Code Online (Sandbox Code Playgroud)
哪一个更好用?我尝试将两者混合并以seg故障结束.