quinta-feira, 4 de abril de 2013

open64 4.5.2.1 patch

--- ./osprey/be/opt/opt_emit.cxx.orig    2012-08-08 08:14:06.000000000 -0300
+++ ./osprey/be/opt/opt_emit.cxx    2012-08-12 20:03:04.850966207 -0300
@@ -78,6 +78,7 @@

 #include <stdint.h>
 #include <sys/times.h>
+#include <unistd.h>
 #include "defs.h"
 #include "tracing.h"
 #include "erglob.h"
--- ./osprey/ipa/local/Makefile.gbase.orig    2012-08-08 08:14:43.000000000 -0300
+++ ./osprey/ipa/local/Makefile.gbase    2012-08-12 20:30:36.601746311 -0300
@@ -338,4 +338,6 @@
 #----------------------------------------------------------------------
 #  Temporary workaround
 #----------------------------------------------------------------------
+ifeq ($(BUILD_COMPILER), OPEN64)
 ipl_summarize_util.o: OPTIMIZER += -CG:all_sched=0
+endif
\ No newline at end of file
--- ./osprey-gcc-4.2.0/gcc/config/i386/linux-unwind.h.orig    2012-08-08 08:14:52.000000000 -0300
+++ ./osprey-gcc-4.2.0/gcc/config/i386/linux-unwind.h    2013-04-01 18:02:22.000000000 -0300
@@ -137,9 +137,9 @@
     {
       struct rt_sigframe {
     int sig;
-    struct siginfo *pinfo;
+    siginfo_t *pinfo;
     void *puc;
-    struct siginfo info;
+    siginfo_t info;
     struct ucontext uc;
       } *rt_ = context->cfa;
       /* The void * cast is necessary to avoid an aliasing warning.

quarta-feira, 3 de abril de 2013

QuTiP 2.2.0 packages (Slackware64-current 20130331) with patch

mcsolve_f90 not work (qutip 2.2.0 20130301), dont have blas library dependencies in the qutraj_run.so library
***** the patch ***** 
--- ./qutip/fortran/setup.py.orig       2013-03-01 04:49:31.000000000 -0300
+++ ./qutip/fortran/setup.py    2013-04-03 22:29:32.114191894 -0300
@@ -42,7 +42,7 @@
     if not lapack_opt:
         blas_opt = get_info('blas', notfound_action=2)
     else:
-        blas_opt = lapack_opt
+        blas_opt = get_info('blas', notfound_action=1)

     # Remove libraries key from blas_opt
     if 'libraries' in blas_opt:  # key doesn't exist on OS X ...

***********************
d340344fa72098276ca41a76cdf377e9  Cython-0.18-x86_64-1.txz
3b1bfbeeaf59f6683f38aa2fe3d2a67a  QuTiP-2.2.0-x86_64-1.txz
2481a78855f9d267c7f27c2cf2f93fb1  apiextractor-0.10.10-x86_64-2.txz
32145606c53e7e3a037f379547acdfce  blas-20110419-x86_64-3.txz
1fdd7b25d04996e2e240a90f4fae92c2  generatorrunner-0.6.16-x86_64-2.txz
201fde17c76e7dd88341e748a5bab7db  ipython-0.13.1-x86_64-1.txz
12c53c6efcfe7e2a91dbe724b33ea537  lapack-3.4.2-x86_64-2.txz
c9b79e07630931f52f1612daa3ab572b  matplotlib-1.2.1-x86_64-1.txz
b0f7603ea8925262649ee5b31008241b  nose-1.2.1-x86_64-1.txz
9fb835e2d268333efe00595c53ac6da0  numpy-1.7.0-x86_64-1.txz
03ce18e89658c8abf9c534b40a57505f  pysetuptools-0.6c11-x86_64-2.txz
64b584595a2c1d0da368c75396158e6f  pyside-qt4.8+1.1.2-x86_64-1.txz
b4e97d03d781b95d87a4ed21c1819bbe  python-dateutil-1.5-x86_64-2.txz
a8af1cec2c85ef9c9850013379e6c6d0  pytz-2013b-x86_64-1.txz
2dd6dadd6484d2ff6bcd06841d070689  scipy-0.11.0-x86_64-1.txz
e04240f5eb4b83e0709c140aaf83b275  shiboken-1.1.2-x86_64-1.txz

Google drve link
qutip-2.2.0-packages.tar

>>> import qutip.testing as qt
>>> qt.run()
Qobj data ... ok
Qobj type ... ok
Qobj Hermicity ... ok
Qobj shape ... ok
Qobj addition ... ok
Qobj subtraction ... ok
Qobj multiplication ... ok
Qobj division ... ok
Qobj power ... ok
Qobj negation ... ok
Qobj equals ... ok
Qobj getitem ... ok
Qobj multiplication type ... ok
Qobj conjugate ... ok
Qobj adjoint (dagger) ... ok
Qobj diagonals ... ok
Qobj eigenenergies ... ok
Qobj eigenstates ... ok
Qobj expm ... ok
Qobj full ... ok
Qobj ket type ... ok
Qobj bra type ... ok
Qobj operator type ... ok
Qobj superoperator type ... ok
Transform 2-level to eigenbasis and back ... ok
Transform 10-level real-values to eigenbasis and back ... ok
Transform 10-level to eigenbasis and back ... ok
Transform 10-level imag to eigenbasis and back ... ok
Consistency between transformations of kets and denstity matrices ... ok
correlation: comparing me and es for oscillator in coherent initial state ... ok
correlation: comparing me and es for oscillator in steady state ... ok
correlation: compare spectrum obtained for eseries and fft methods ... ok
Diagonalization of random two-level system ... ok
Diagonalization of composite systems ... ok
von-Neumann entropy ... ok
Linear entropy ... ok
Concurrence ... ok
Mutual information ... ok
Conditional entropy ... ok
Read and write complex valued decimal formatted data ... ok
Read and write complex valued default formatted data ... ok
Read and write complex valued exp formatted data ... ok
Read and write real valued decimal formatted data ... ok
Read and write real valued default formatted data ... ok
Read and write real valued exp formatted data ... ok
Read and write with automatic separator detection ... ok
Floquet: test unitary evolution of time-dependent two-level system ... ok
Monte-carlo: Constant H with no collapse ops (expect) ... ok
Monte-carlo: Constant H with no collapse ops (states) ... ok
Monte-carlo: Constant H (str format) with no collapse ops (expect) ... ok
Monte-carlo: Constant H (func format) with no collapse ops (expect) ... ok
Monte-carlo: Constant H (str format) with no collapse ops (states) ... ok
Monte-carlo: Constant H (func format) with no collapse ops (states) ... ok
Monte-carlo: Constant H with constant collapse ... ok
Monte-carlo: Constant H with single collapse operator ... ok
Monte-carlo: Constant H with single expect operator ... ok
Monte-carlo: Collapse terms constant (func format) ... ok
Monte-carlo: Collapse terms constant (str format) ... ok
Monte-carlo: Time-dependent H (func format) ... ok
Monte-carlo: Time-dependent H (str format) ... ok
Monte-carlo: check for correct dtypes (mc_avg=True) ... ok
Monte-carlo: check for correct dtypes (mc_avg=False) ... ok
mcsolve_f90: Constant H with no collapse ops (expect) ... ok
mcsolve_f90: Constant H with no collapse ops (states) ... ok
mcsolve_f90: Constant H with constant collapse ... ok
mcsolve_f90: Constant H with single collapse operator ... ok
mcsolve_f90: Constant H with single expect operator ... ok
mcsolve_f90: check for correct dtypes (mc_avg=True) ... ok
mcsolve_f90: check for correct dtypes (mc_avg=False) ... ok
mesolve: cavity-qubit interaction, no dissipation ... ok
mesolve: cavity-qubit without interaction, decay ... ok
mesolve: cavity-qubit with interaction, decay ... ok
mesolve: qubit without dissipation ... ok
mesolve: simple time-dependence as function list ... ok
mesolve: simple time-dependence as string list ... ok
mesolve: simple constant decay ... ok
mesolve: constant decay as function list ... ok
mesolve: constant decay as string list ... ok
mesolve: simple constant decay ... ok
mesolve: simple constant decay ... ok
odechecks: monte-carlo ... ok
Spin 1/2 operators ... ok
Spin 3/2 operators ... ok
Spin 2 operators ... ok
Spin 5/2 operators ... ok
Destruction operator ... ok
Creation operator ... ok
Identity operator ... ok
Number operator ... ok
Squeezing operator ... ok
Displacement operator ... ok
parfor ... ok
partial transpose of bipartite systems ... ok
partial transpose: comparing sparse and dense implementations ... ok
partial transpose: randomized tests on tripartite system ... ok
quantum process tomography for snot gate ... ok
quantum process tomography for cnot gate ... ok
Test mesolve qubit, with dissipation ... ok
Test mesolve qubit, no dissipation ... ok
Test essolve qubit, with dissipation ... ok
Test mcsolve qubit, with dissipation ... ok
Test mcsolve qubit, no dissipation ... ok
random Unitary ... ok
random density matrix ... ok
random hermitian ... ok
random ket ... ok
Sparse eigs Hermitian ... ok
Sparse eigs non-Hermitian ... ok
Sparse eigvals only Hermitian. ... ok
Dense eigs Hermitian. ... ok
Dense eigs non-Hermitian ... ok
Dense eigvals only Hermitian ... ok
states: coherent density matrix ... ok
states: Fock density matrix ... ok
states: thermal density matrix ... ok
Steady state: Thermal qubit ... ok
Steady state: Thermal harmonic oscillator ... ok
Superoperator: Conversion matrix to vector to matrix ... ok
Superoperator: Test compability between matrix/vector conversion and ... ok
Superoperator: Conversion between matrix and vector indices ... ok
Superoperator: Conversion vector to matrix to vector ... ok
wigner: test wigner function calculation for coherent states ... ok
wigner: test wigner function calculation for Fock states ... ok
wigner: compare wigner methods for random density matrices ... ok
wigner: compare wigner methods for random state vectors ... ok

----------------------------------------------------------------------
Ran 125 tests in 316.766s

OK

quarta-feira, 30 de janeiro de 2013

Modelo ABNT/LaTeX não oficial DF/UFSCar

Criei um modelo tentando seguir a norma ABNT quando estava escrevendo a minha tese de doutorado em 2008 no Departamento de Física da UFSCar. Para quem já sabe mexer com LaTeX vai ser muito fácil. Clique no link abaixo para fazer o download, está no meu google drive.
modelo ABNT(DF/UFSCar)

Requesito: compilador LaTeX (PDFLaTex), abntex
Eu uso o Texlive e o abntex 0.9 beta2 com as correções nos arquivos .def
nbr10520-1988.def
nbr10520-2001.def
nbr10520-2002.def
-\ifx\AbntCitetype\AbntCitetypeALF
+\ifx\AbntCallType\AbntCallTypeALF
Ou seja, precisa modificar AbntCitetypeALF para AbntCallTypeALF

Extraia o conteudo do arquivo em alguma pasta/diretorio e siga o exemplo tese.tex, para quem usa o kile tem o projeto pronto para facilitar.

o ABNTEX, pegue-o no endereço http://abntex.codigolivre.org.br/
como root copie o conteudo texmf no texmf-dist no caso do Texlive, localize os def que citei e faça as modificações e atualize a arvore dos diretorios do seu LaTeX.
Se você for usar uma tabela de siglas é melhor copiar o bin/geratss.

Esse modelo foi feito para facilitar a criação da folha de rosto, usa o pacote lastpage.sty para contar o número de paginas/folhas. Dependendo da intituição vai ter que sentar com o bibliotecario antes e fazer a folha com os dados da ficha catalografica na versao final da sua tese ou dissertação.
Pode ser usado para dissertação de Mestrado, bem como para a tese de Doutorado, que automaticamente rearruma para o número de membros da banca de defesa.

Pode ser facilmente modificado para o formato dos outros departamentos da UFSCar, e tambem nos formatos das outras universidades.

Os nomes das pessoas são ficticios, criadas de forma humorada sentida na pele de muitos durante uma pós-graduação. Andei passando esse modelo para algumas pessoas, mas ainda muitos usam Word e Powerpoint.
Para aproveitar o que já foi feito no LaTeX, você pode usar o Beamer para fazer os silides da sua defesa, eu recomendo o tema progressbar do Sylvain Bouveret que pode ser obtido no endereço: http://recherche.noiraudes.net/fr/LaTeX.php
Mas se você não consegue abandonar o Powerpoint, pode gerar as figuras das equações, existem muitos programas que fazem isso.

sexta-feira, 25 de janeiro de 2013

Benchmark on GPU HD7970 / LAMMPS

AMD FX-8150@4.086GHz / GPU XFX HD7970 GHz edition / MPICH 3.0.1 / Open64 4.5.2 (AMD) / APP SDK 2.8 / LAMMPS 20130121 (compiled with -O3)

Results for Rhodopsin
On the FX-8150
Single core 45.9495 seconds
4 cores 11.94 seconds
8 cores 7.06722 seconds

On the GPU HD7970 GHz edition
1 proc 4.8 seconds
2 procs 3.67 seconds

Results with FirePro3D V8800 and Tesla C2050
https://sites.google.com/site/akohlmey/news-and-announcements/gpuacceleratedlammpsonamdgpus

Results for EAM

1 procs
mpirun -n 1 ./lmp_mpich  -sf gpu -c off -v g 1 -v x 80 -v y 80 -v z 80 -v t 100 < in.eam.gpu
--------------------------------------------------------------------------
GPU 0: Tahiti, 256 cores, 2.9 GB, 1.1 GHZ (Double Precision)
--------------------------------------------------------------------------

Initializing GPU and compiling on process 0...Done.
Initializing GPU 0 on core 0...Done.

Setting up run ...
Memory usage per processor = 426.905 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7249920            0   -6826360.6    18704.149
      50    780.81547   -7031660.9            0   -6824959.8    52291.364
     100    798.21786   -7036295.3            0   -6824987.4    51479.467
Loop time of 27.893 on 1 procs for 100 steps with 2048000 atoms


2 procs

mpirun -n 2 ./lmp_mpich  -sf gpu -c off -v g 1 -v x 80 -v y 80 -v z 80 -v t 100 < in.eam.gpu
--------------------------------------------------------------------------
GPU 0: Tahiti, 256 cores, 2.9 GB, 1.1 GHZ (Double Precision)
--------------------------------------------------------------------------

Initializing GPU and compiling on process 0...Done.
Initializing GPU 0 on core 0...Done.
Initializing GPU 0 on core 1...Done.

Setting up run ...
Memory usage per processor = 225.757 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7249920            0   -6826360.6    18704.149
      50    780.81547   -7031660.9            0   -6824959.8    52291.364
     100    798.21786   -7036295.3            0   -6824987.4    51479.467
Loop time of 22.4219 on 2 procs for 100 steps with 2048000 atoms



mpirun -n 1 ./lmp_cuda  -sf cuda -v g 2 -v x 80 -v y 80 -v z 80 -v t 100 < in.eam.cuda

LAMMPS (21 Jan 2013)
# Using LAMMPS_CUDA
USER-CUDA mode is enabled (lammps.cpp:393)
# CUDA: Activate GPU
# Using device 0: GeForce GTX 580
Lattice spacing in x,y,z = 3.615 3.615 3.615
Created orthogonal box = (0 0 0) to (289.2 289.2 289.2)
  1 by 1 by 1 MPI processor grid
Created 2048000 atoms
# CUDA: VerletCuda::setup: Allocate memory on device for maximum of 2050000 atoms...
# CUDA: Using precision: Global: 8 X: 8 V: 8 F: 8 PPPM: 8
Setting up run ...
# CUDA: VerletCuda::setup: Upload data...
# CUDA: Total Device Memory useage post setup: 1314.117188 MB
Memory usage per processor = 416.017 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7249920            0   -6826360.6    18704.149
      50    780.81547   -7031660.9            0   -6824959.8    52291.364
     100    798.21786   -7036295.3            0   -6824987.4    51479.467
Loop time of 20.0248 on 1 procs for 100 steps with 2048000 atoms
 




sábado, 8 de dezembro de 2012

LAMMPS (CUDA/GTX580)

Uma simulação com mais de 2 milhões de atomos usando o potencial EAM em uma placa de vídeo GTX 580 no LAMMPS com CUDA.

--------------------------------------------------------------------------
RESULTADOS
--------------------------------------------------------------------------
--------------------------------------------------------------------------
Na GPU GTX 580 1.544 GHz CUDA
--------------------------------------------------------------------------
# CUDA: Activate GPU
# Using device 0: GeForce GTX 580
Lattice spacing in x,y,z = 3.615 3.615 3.615
Created orthogonal box = (0 0 0) to (289.2 289.2 285.585)
  1 by 1 by 1 MPI processor grid
Created 2022400 atoms
# CUDA: VerletCuda::setup: Allocate memory on device for maximum of 2030000 atoms...
# CUDA: Using precision: Global: 8 X: 8 V: 8 F: 8 PPPM: 8
Setting up run ...
# CUDA: VerletCuda::setup: Upload data...
# CUDA: Total Device Memory useage post setup: 1316.125000 MB
Memory usage per processor = 412.306 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7159296            0   -6741031.1    18704.149
      50    780.71972   -6943740.2            0   -6739647.9    52292.948
     100    798.21531   -6948340.9            0     -6739675    51478.838
Loop time of 19.7667 on 1 procs for 100 steps with 2022400 atoms

--------------------------------------------------------------------------
Na CPU AMD Phenom(tm) II X6 1100T
--------------------------------------------------------------------------
  2 by 3 by 1 MPI processor grid
Created 2022400 atoms
Setting up run ...
Memory usage per processor = 130.318 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7159296            0   -6741031.1    18704.149
      50    780.71972   -6943740.2            0   -6739647.9    52292.948
     100    798.21531   -6948340.9            0     -6739675    51478.838
Loop time of 108.489 on 6 procs for 100 steps with 2022400 atoms


Uma GTX580 usando OpenCL  é mais lento que o HD7970 para esse tipo de cálculo. O estranho é que só aparecem 256 cores no HD7970, e tinha visto em algum lugar que são 2048 para precisão simples e 512 para precisão dupla. Já o GTX580 aparecem os 512 cores.
--------------------------------------------------------------------------
GPU 0: GeForce GTX 580, 512 cores, 1.4/1.5 GB, 1.5 GHZ (Double Precision)
-------------------------------------------------------------------------
-

Initializing GPU and compiling on process 0...Done.
Initializing GPUs 0-1 on core 0...Done.

Setting up run ...
Memory usage per processor = 215.701 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -3537961            0   -3331264.1    18704.139
      50    780.24619   -3431376.3            0   -3330579.7    52317.163
     100    798.09276   -3433696.3            0   -3330594.2    51480.829
Loop time of 17.601 on 1 procs for 100 steps with 999424 atoms


--------------------------------------------------------------------------
GPU 0: Tahiti, 256 cores, 2.8 GB, 1.1 GHZ (Double Precision)
GPU 1: AMD FX(tm)-8150 Eight-Core Processor, 8 cores, 3.6 GHZ (Double Precision)
--------------------------------------------------------------------------


Initializing GPU and compiling on process 0...Done.
Initializing GPUs 0-1 on core 0...Done.

Setting up run ...
Memory usage per processor = 215.69 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -3537961            0   -3331264.1    18704.139
      50    780.24619   -3431376.3            0   -3330579.7    52317.163
     100    798.09276   -3433696.3            0   -3330594.2    51480.829
Loop time of 14.9655 on 1 procs for 100 steps with 999424 atoms


Olhando o desmpenho da GTX580(CUDA) vs HD7970(OpenCL post anterior) parece que o ganho está no clock da GPU, só com a aparencia não dá para concluir nada, mas está faltando cores no HD7970, está, desde os primordios sempre uma ATI teve mais cores do que as GPUs da NVIDIA, e essa que tinha um clock mais elevado na briga pelo desempenho.

domingo, 2 de dezembro de 2012

LAMMPS no AMD HD7970

Uma simulação com mais de 2 milhões de atomos usando o potencial EAM em uma placa de vídeo da XFX (AMD HD7970 GHz edition com 3GB), tudo em dupla precisão usando LAMMPS com pacote GPU.
(double precision/LAMMPS/AMD SDK APP 2.7/fglrx 9.01.8/Slackware64-current)


--------------------------------------------------------------------------
RESULTADOS
--------------------------------------------------------------------------
--------------------------------------------------------------------------
Na GPU HD7079 1.05GHz
--------------------------------------------------------------------------
--------------------------------------------------------------------------
- Using GPGPU acceleration for eam:
-  with 1 proc(s) per device.
-  with OpenCL Parameters for: GENERIC_OCL
--------------------------------------------------------------------------
GPU 0: Tahiti, 256 cores, 2.9 GB, 1.1 GHZ (Double Precision)
GPU 1: AMD FX(tm)-8150 Eight-Core Processor           , 8 cores, 3.6 GHZ (Double Precision)
--------------------------------------------------------------------------

Initializing GPU and compiling on process 0...Done.
Initializing GPUs 0-1 on core 0...Done.

Setting up run ...
Memory usage per processor = 422.869 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7159296            0   -6741031.1    18704.149
      50    780.71972   -6943740.2            0   -6739647.9    52292.948
     100    798.21531   -6948340.9            0     -6739675    51478.838
Loop time of 29.6983 on 1 procs for 100 steps with 2022400 atoms

--------------------------------------------------------------------------
Na CPU FX-8150 com over de 4.086GHz
--------------------------------------------------------------------------

  2 by 2 by 2 MPI processor grid
Created 2022400 atoms
Setting up run ...
Memory usage per processor = 96.6497 Mbytes
Step Temp E_pair E_mol TotEng Press
       0         1600     -7159296            0   -6741031.1    18704.149
      50    780.71972   -6943740.2            0   -6739647.9    52292.948
     100    798.21531   -6948340.9            0     -6739675    51478.838
Loop time of 93.0408 on 8 procs for 100 steps with 2022400 atoms


--------------------------------------------------------------------------
AMD SDK APP 2.7 PATCH
--------------------------------------------------------------------------
--- ./make/openclsdkdefs.mk-orig        2012-05-14 04:43:34.000000000 -0300
+++ ./make/openclsdkdefs.mk     2012-11-30 20:41:05.275285082 -0200
@@ -230,7 +230,7 @@
 ifdef MINGW
   LDFLAGS           += -L/usr/X11R6/lib
 else
-  LDFLAGS           += -lpthread -ldl -L/usr/X11R6/lib
+  LDFLAGS           += -lpthread -ldl -L/usr/X11R6/lib64 -lX11
 endif
   LD_LIBDIR_FLAG    := -L
   LD_SHARED_FLAG    := -shared  
--- ./samples/opencl/SDKUtil/include/SDKCommon.hpp-orig 2012-05-14 04:43:34.000000000 -0300
+++ ./samples/opencl/SDKUtil/include/SDKCommon.hpp      2012-11-30 14:38:11.671185385 -0200
@@ -18,6 +18,7 @@
 #include

 #include

 #include

+#include


 #include

 

--------------------------------------------------------------------------
GERYON - ocl_timer.h
--------------------------------------------------------------------------
+#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
 #include "ocl_macros.h"
 #include "ocl_device.h"


sábado, 1 de dezembro de 2012

Afiando faca com o que tiver.

Se você tem facas boas, provavelmente tem pedras próprias para afiar-las. Eu tenho uma pedra #300, mas se tivesse umas facas profissionais provavelmente teria mais duas pedras. Uma pedra barata deve estar em torno de R$8,00, mas as importadas são bem mais caras. Obs.: As pedras japonesas de afiar só devem ser utilizadas com água, nada de óleo, perde a eficiência e ainda faz sujeira gordurosa.

Agora porque estou escrevendo isso, porque quando vou para casa de amigos para almoçar, sempre tem uma carne sendo cortada com uma faca que só corta manteiga na temperatura ambiente... hehe. Me dá uma agonia ... hehe. E eles não costumam ter pedras para afiar facas, nem mesmo as de R$8,00....
Acho que qualquer casa deva ter alguma xícara de cerâmica, pode ser prato ou outra coisa de cerâmica, eles não são esmaltados na parte de baixo e essa parte pode ser usada para afiar as facas.
Pesquisando na internet achei um video de 2008, não sei se esse é o primeiro.
Nem tinha visto o video deste tipo antes, eu tinha uma xícara que veio com um defeito nessa parte e ela ficava bamba em cima da mesa, aí tentei aplainar com uma lixa d'agua, gastei bem a lixa para ficar razoavel. Assim lembrava que era bem resistente como uma pedra e acabei usando na casa de um amigo depois de tentar afiar uma com uma chaira em vão, a xícara é muitoooo mais eficiente.
 
Dá para afiar com monte coisas, o problema é se deixam fazer com elas hehe. Restos de obras são uma maravilha para isso, já usei pedras de piso, pedras de parede, parte de trás dos azulejo.